package com.situ.day11.thread.producer;

import java.util.LinkedList;

/*
 * 核心类，生产的蛋糕放到盘子里面，吃的蛋糕从盘子里面取
 */
public class Panzi {
	//使用LinkedList来模拟队列的操作，队列尾部添加，队列头部删除
	private LinkedList<Cake> list = new LinkedList<>();

	/*
	 * 生产了蛋糕放到盘子里面
	 */
	public synchronized void putCake(Cake cake) {
		//在队列尾部添加蛋糕
		list.addLast(cake);
		notifyAll();//生产了蛋糕之后要通知正在wait的ConsumerThread这些消费者
		System.out.println("生产者线程 putCake notifyAll");
	}
	
	/*
	 * 从盘子里面拿出蛋糕吃
	 */
	public synchronized Cake getCake() {
		if (list.size() <= 0) {//盘子里面没有蛋糕
			try {
				System.out.println("消费者线程 getCake  wait");
				wait();//盘子里面没有蛋糕，需要等待生产者生产蛋糕
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		//队列头部删除
		Cake cake = list.removeFirst();
		return cake;
	}
}
